;;; GNU Guix --- Functional package management for GNU
;;;
;;; Copyright © 2022 jgart <jgart@dismail.de>
;;;
;;; This file is not part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (guixrus packages javascript biwascheme)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (gnu packages)
  #:use-module (gnu packages web)
  #:use-module (gnu packages node)
  #:use-module (gnu packages node-xyz)
  #:use-module (guix packages)
  #:use-module (guix git-download)
  #:use-module (guix build-system node))

(define-public node-optparse
  (package
    (name "node-optparse")
    (version "1.0.5")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/jfd/optparse-js")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "0q46l5plidydi1wgvf8k467kjczk03ksbmfqaz6zln271clfqcrn"))))
      (build-system node-build-system)
    (arguments
     '(#:tests? #f))
    (home-page "https://github.com/jfd/optparse-js")
    (synopsis "Option parser for Javascript Resources")
    (description "")
    (license license:expat)))

(define-public biwascheme
  (package
    (name "biwascheme")
    (version "0.7.4")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/biwascheme/biwascheme")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32 "0lqmy7hkm9jhq3zhflgi6512jky1rvqcjaqp91fah3fjvb608hgj"))))
      (build-system node-build-system)
    (arguments
     '(#:tests? #f
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'switch-to-esbuild
           (lambda args
             (substitute* "package.json"
               (("\"build.*rollup -c.*")
                (string-append
                 "\"build\": \""
                 "esbuild src/main-node.js --bundle --platform=node --target=es6 --format=cjs --outfile=release/node_biwascheme.js &&"
                 "esbuild src/main-browser.js --target=es6 --format=esm --outfile=release/biwascheme.mjs"
                 "\",")))))
         (add-after 'patch-dependencies 'delete-dependencies
           (lambda args
             (delete-dependencies
               '("@rollup/plugin-replace"
                 "body-parser"
                 "express"
                 "marked"
                 "prettier"
                 "rollup"
                 "rollup-plugin-prettier"
                 "rollup-plugin-terser"
                 "sirv-cli")))))))
    (inputs
      (list node-optparse))
    (native-inputs
      (list esbuild))
    (home-page "https://www.biwascheme.org/")
    (synopsis "Scheme interpreter written in JavaScript")
    (description "BiwaScheme is a Scheme interpreter written in JavaScript.")
    (license license:expat)))

